<?php

require_once 'classes/Rapport.php';
require_once 'SCinterface.php';
require_once 'classes/Message.php';

/*
 * Classe de service CRUD pour manipuler les enregistrements de rapports
 * @author Zikrija
 * @date 04.05.2012
 */
class SCrapport {
    
    private $db;

    /**
     *Contructeur créant l'objet pour la connexion à la DB 
     */
    public function __construct() {
        $this->db = new PDO(ACA_DB_DSN, ACA_DB_USER, ACA_DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    /**
    * Ajoute un rapport
    * @param Rapport Rapport à ajouter
    */
    public function ajouter($unRapportAAjouter) {
        try{

            $query =  $this->db->prepare("INSERT INTO rapport " .
                "(date, titre, contenu, personne_id, plainte_id) VALUES(".
                ":date, :titre, :contenu, :personne_id, :plainte_id)");

            $query->execute(array(
                'date'          => $unRapportAAjouter->getDate() ,
                'titre'         => $unRapportAAjouter->getTitre(),
                'contenu'       => $unRapportAAjouter->getContenu() ,
                'personne_id'   => $unRapportAAjouter->getPersonne_id() ,
                'plainte_id'    => $unRapportAAjouter->getPlainte_id()    
                ));

            $query->closeCursor();
        }
        catch(PDOException $e){
           return new Message("Rapport non ajouté: ".$e->getMessage());
        }
        return $unRapportAAjouter;
   }
    /**
     * Methode permettant de modifier un rapport
     * @param rapport La rapport $ modifier
     * @return boolean 
     */
    public function modifier($unAncienRapport, $unNouveauRapport){
        try{

            $query =  $this->db->prepare("UPDATE rapport SET ".
                "date = :nouvelleDate, titre = :nouveauTitre , contenu = :nouveauContenu, ".
                "personne_id = :nouvellePersonne_id, plainte_id = :nouvellePlainte_id ".
                "WHERE date = :ancienneDate AND personne_id = :anciennePersonne_id AND plainte_id = :anciennePlainte_id");

            $query->execute(array(
                'nouvelleDate'            => $unNouveauRapport->getDate(),
                'nouveauTitre'            => $unNouveauRapport->getTitre(),
                'nouveauContenu'          => $unNouveauRapport->getContenu() ,
                'nouvellePersonne_id'     => $unNouveauRapport->getPersonne_id(),
                'nouvellePlainte_id'      => $unNouveauRapport->getPlainte_id(),
                'ancienneDate'            => $unAncienRapport->getDate(),
                'anciennePersonne_id'     => $unAncienRapport->getPersonne_id(),
                'anciennePlainte_id'      => $unAncienRapport->getPlainte_id()
            ));

            $query->closeCursor();
            
        }
        catch(PDOException $e){
            return new Message("Rapport non modifié: ".$e->getMessage());
        }
        return $unNouveauRapport;
    }
    /**
     * Methode permettant de supprimer une rapport
     * @param date date du rapport à supprimer
     * @param int id de la personne ayant rédigé le rapport
     * @param int id de la plainte concernée
     * @return boolean 
     */
    public function supprimer($dateRapportASupprimer, $idPersonneRapportASupprimer, $idPlainteRapportASupprimer){
        try{
            $query = $this->db->prepare("DELETE FROM rapport WHERE date = :date AND personne_id = :personne_id AND plainte_id = :plainte_id ");
            $query->execute(array(
                'date'           => $dateRapportASupprimer,
                'personne_id'           => $idPersonneRapportASupprimer,
                'plainte_id'           => $idPlainteRapportASupprimer
            ));            
            $query->closeCursor();
            
            $message = new Message("Rapport supprimé"); 
        }
        catch(PDOException $e){
            $message = new Message("Rapport non supprimé: ". $e->getMessage());
        }
        return $message;
    }
   
    /**
     * 
     * @param rapport de recherche sous forme d'objet Rapport
     * @return un tableau d'objet rapport
     */
    public function lister($rapportALister){
        try{
            $sql="SELECT * FROM rapport ";
            $sql_Where="WHERE";
            if($rapportALister!=NULL)
            {
                if($rapportALister->getDate()!=NULL)
                    $sql_Where.=" date = '".$rapportALister->getDate()."' AND ";
                if($rapportALister->getTitre()!=NULL)
                    $sql_Where.=" titre LIKE '%".$rapportALister->getTitre()."%' AND ";
                if($rapportALister->getContenu()!=NULL)
                    $sql_Where.=" contenu LIKE '%".$rapportALister->getContenu()."%' AND ";
                if($rapportALister->getPersonne_id()!=NULL)
                    $sql_Where.=" personne_id = '".$rapportALister->getPersonne_id()."' AND ";
                if($rapportALister->getPlainte_id()!=NULL)
                    $sql_Where.=" plainte_id = '".$rapportALister->getPlainte_id()."' AND ";
            }         


            $sql_Where = substr($sql_Where,0,-5);
            $sql.=$sql_Where." ORDER BY date";
            $lesRapportsTrouves=NULL;
            $unRapportLu=NULL;
            $result=$this->db->query($sql);
            while($row = $result->fetch())
            {   
                $unRapportLu = new rapport($row['date'], $row['titre'], $row['contenu'], $row['personne_id'], $row['plainte_id']);

                $lesRapportsTrouves[]=$unRapportLu;
            }                
        }
        catch(PDOException $e)
        {
            print($e->getMessage());
            $lesRapportsTrouves=NULL;
        }
        return $lesRapportsTrouves;
    } 
}

?>
